home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Freeware / Miro 1.0 / Miro_Installer.exe / chrome / content / preffuncs.js < prev    next >
Encoding:
JavaScript  |  2007-11-12  |  9.6 KB  |  308 lines

  1. /*
  2. # Miro - an RSS based video player application
  3. # Copyright (C) 2005-2007 Participatory Culture Foundation
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  18. */
  19.  
  20. var pybridge = Components.classes["@participatoryculture.org/dtv/pybridge;1"].
  21.                 getService(Components.interfaces.pcfIDTVPyBridge);
  22.  
  23. var originalMoviesDir = null;
  24.  
  25. function onload() {
  26.   this.document.selectDirectoryWatch = selectDirectoryWatch;
  27.   jsbridge.setPrefDocument(this.document);
  28.   pybridge.startPrefs();
  29.   selectDirectoryWatch(false);
  30.   document.getElementById("runonstartup").checked = pybridge.getRunAtStartup();
  31.   setCloseToTray(pybridge.minimizeToTray());
  32.   document.getElementById('warn-on-quit').checked = pybridge.getWarnIfDownloadingOnQuit();
  33.   setCheckEvery(pybridge.getCheckEvery());
  34.   setMoviesDir(pybridge.getMoviesDirectory());
  35.   originalMoviesDir = pybridge.getMoviesDirectory();
  36.   setLimitUpstream(pybridge.getLimitUpstream());
  37.   setMaxUpstream(pybridge.getLimitUpstreamAmount());
  38.   setMaxManual(pybridge.getMaxManual());
  39.   setHasMinDiskSpace(pybridge.getPreserveDiskSpace());
  40.   setMinDiskSpace(pybridge.getPreserveDiskSpaceAmount());
  41.   setExpire(pybridge.getExpireAfter());
  42.   setResumeVideosMode(pybridge.getResumeVideosMode());
  43.   setSinglePlayMode(pybridge.getSinglePlayMode());
  44.   setBTMinPort(pybridge.getBTMinPort());
  45.   setBTMaxPort(pybridge.getBTMaxPort());
  46. }
  47.  
  48. function ondialogaccept() {
  49.   checkMoviesDirChanged();
  50.   checkBTPorts();
  51.   pybridge.updatePrefs()
  52.   jsbridge.setPrefDocument(null);
  53. }
  54.  
  55. /* Convert a floating point object into a string to show to the user.  We
  56.  * round it to 2 decimal places to get arround binary to decimal conversions.
  57.  */ 
  58. function floatToPrintable(value) {
  59.     value = Math.round(value * 100);
  60.     var intPart = Math.floor(value / 100);
  61.     var decimalPart = value % 100;
  62.     while(decimalPart % 10 == 0) {
  63.         if(decimalPart == 0) return intPart;
  64.         decimalPart /= 10;
  65.     }
  66.     return intPart + "." + decimalPart;
  67. }
  68.  
  69.  
  70. function runOnStartupChange() {
  71.   if (document.getElementById("runonstartup").checked)
  72.       pybridge.setRunAtStartup(true);
  73.   else
  74.       pybridge.setRunAtStartup(false);
  75. }
  76.  
  77. function warnOnQuitChange() {
  78.   if (document.getElementById("warn-on-quit").checked)
  79.       pybridge.setWarnIfDownloadingOnQuit(true);
  80.   else
  81.       pybridge.setWarnIfDownloadingOnQuit(false);
  82. }
  83.  
  84. function closeToTrayChange() {
  85.   var radio = document.getElementById('close-to-tray-yes');
  86.   pybridge.setMinimizeToTray(radio.selected);
  87. }
  88.  
  89. function setCheckEvery(minutes) {
  90.   var check = document.getElementById("checkevery");
  91.   if (minutes == 30) check.value = "30";
  92.   else if (minutes == 60) check.value = "60";
  93.   else check.value = "never";
  94. }
  95.  
  96. function checkEveryChange(minutes) {
  97.    pybridge.setCheckEvery(parseInt(minutes));
  98. }
  99.  
  100. function setMoviesDir(directory) {
  101.     var moviesDirBox = document.getElementById('movies-directory');
  102.     moviesDirBox.abspath = directory;
  103.     moviesDirBox.value = pybridge.shortenDirectoryName(directory);
  104. }
  105.  
  106. function selectMoviesDirectory() {
  107.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  108.             .createInstance(Components.interfaces.nsIFilePicker);
  109.  
  110.     fp.init(window, "Select a Directory to store downloads",
  111.             Components.interfaces.nsIFilePicker.modeGetFolder);
  112.     var res = fp.show();
  113.     if (res == Components.interfaces.nsIFilePicker.returnOK){
  114.         setMoviesDir(fp.file.path);
  115.     }
  116.  
  117. }
  118.  
  119. function addDirectoryWatch() {
  120.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  121.             .createInstance(Components.interfaces.nsIFilePicker);
  122.  
  123.     fp.init(window, "Select a Directory to monitor",
  124.             Components.interfaces.nsIFilePicker.modeGetFolder);
  125.     var res = fp.show();
  126.     if (res == Components.interfaces.nsIFilePicker.returnOK){
  127.         pybridge.addDirectoryWatch(fp.file.path);
  128.     }
  129. }
  130.  
  131. function removeDirectoryWatch() {
  132.     var xulListBox = document.getElementById('movies-collection-listbox');
  133.     var selected = xulListBox.selectedItem;
  134.     if (selected) {
  135.       var id = selected.getAttribute('folder_id');
  136.       pybridge.removeDirectoryWatch(id);
  137.     }
  138. }
  139.  
  140. function toggleDirectoryWatchShown(checkbox) {
  141.     var id = checkbox.getAttribute('folder_id');
  142.     pybridge.printOut(id);
  143.     pybridge.toggleDirectoryWatchShown(id);
  144.     return true;
  145. }
  146.  
  147. function selectDirectoryWatch(always_false) {
  148.     var xulListBox = document.getElementById('movies-collection-listbox');
  149.     var selected = xulListBox.selectedItem;
  150.     var removeButton = document.getElementById('movies-collection-remove-folder');
  151.     if (selected && !always_false) {
  152.       removeButton.disabled = false;
  153.     } else {
  154.       removeButton.disabled = true;
  155.     }
  156. }
  157.  
  158. function checkMoviesDirChanged() {
  159.     var moviesDirBox = document.getElementById('movies-directory');
  160.     var currentMoviesDir = moviesDirBox.abspath;
  161.     if(originalMoviesDir != null && originalMoviesDir != currentMoviesDir) {
  162.         var params = { "out" : null }
  163.         window.openDialog('chrome://dtv/content/migrate.xul', 'migrate',
  164.                 'chrome,dependent,centerscreen,modal', params);
  165.         pybridge.changeMoviesDirectory(currentMoviesDir, params.out);
  166.     }
  167. }
  168.  
  169. function setMaxUpstream(max) {
  170.     document.getElementById("maxupstream").value = max;
  171. }
  172.  
  173. function setLimitUpstream(limit) {
  174.     document.getElementById("limitupstream").checked = limit;
  175.     setMaxUpstreamDisabled(!limit);
  176. }
  177.  
  178. function setMaxUpstreamDisabled(disabled) {
  179.     var textbox = document.getElementById("maxupstream");
  180.     var description = document.getElementById("maxupstream-description");
  181.     if(disabled) {
  182.         textbox.setAttribute('disabled', true);
  183.         description.setAttribute('disabled', true);
  184.     } else {
  185.         textbox.removeAttribute('disabled');
  186.         description.removeAttribute('disabled');
  187.     }
  188. }
  189.  
  190. function limitUpstreamChange() {
  191.   var ret = (document.getElementById("limitupstream").checked);
  192.   setMaxUpstreamDisabled(!ret);
  193.   pybridge.setLimitUpstream(ret);
  194. }
  195. function maxUpstreamChange() {
  196.   var textbox = document.getElementById("maxupstream");
  197.   var value = parseInt(textbox.value);
  198.   if ((value == 0) || (isNaN(value))) value = 1;
  199.   textbox.value=value;
  200.   pybridge.setLimitUpstreamAmount(value);
  201. }
  202.  
  203. function setMaxManual(max) {
  204.     document.getElementById("maxmanual").value = max;
  205. }
  206.  
  207. function maxManualChange() {
  208.   var textbox = document.getElementById("maxmanual");
  209.   var value = parseInt(textbox.value);
  210.   if ((value == 0) || (isNaN(value))) value = 1;
  211.   textbox.value=value;
  212.   pybridge.setMaxManual(value);
  213. }
  214.  
  215. function setMinDiskSpace(min) {
  216.     document.getElementById("minspace").value = floatToPrintable(min);
  217. }
  218.  
  219. function setHasMinDiskSpace(hasit) {
  220.     document.getElementById("hasminspace").checked = hasit;
  221.     document.getElementById("minspace").disabled = !hasit;
  222. }
  223.  
  224. function hasMinSpaceChange() {
  225.   var ret = document.getElementById("hasminspace").checked;
  226.   var textbox = document.getElementById("minspace");
  227.   textbox.disabled = !ret;
  228.   pybridge.setPreserveDiskSpace(ret);
  229. }
  230.  
  231. function minSpaceChange() {
  232.   var textbox = document.getElementById("minspace");
  233.   var value = parseFloat(textbox.value);
  234.   if ((value == 0) || (isNaN(value))) value = 1;
  235.   textbox.value=value;
  236.   pybridge.setPreserveDiskSpaceAmount(value);
  237. }
  238.  
  239. function setExpire(days) {
  240.   var check = document.getElementById("expiration");
  241.   if (days == "1") check.value = "1";
  242.   else if (days == "3") check.value = "3";
  243.   else if (days == "6") check.value = "6";
  244.   else if (days == "10") check.value = "10";
  245.   else if (days == "30") check.value = "30";
  246.   else check.value = "never";
  247. }
  248. function expirationChange(days) {
  249.    pybridge.setExpireAfter(parseInt(days));
  250. }
  251.  
  252. function singlePlayModeChange() {
  253.   var radio = document.getElementById('single-play-mode-radio');
  254.   pybridge.setSinglePlayMode(radio.selected);
  255. }
  256.  
  257. function setCloseToTray(closeToTray) {
  258.   if(closeToTray) {
  259.     var button = document.getElementById('close-to-tray-yes');
  260.   } else {
  261.     var button = document.getElementById('close-to-tray-no');
  262.   }
  263.   document.getElementById('close-to-tray').selectedItem = button;
  264. }
  265.  
  266. function setSinglePlayMode(value) {
  267.   if(value) {
  268.     var button = document.getElementById('single-play-mode-radio');
  269.   } else {
  270.     var button = document.getElementById('continuous-play-mode-radio');
  271.   }
  272.   document.getElementById('play-mode-radiogroup').selectedItem = button;
  273. }
  274.  
  275. function resumeVideosModeChange() {
  276.   var checkbox = document.getElementById('resumeVideos');
  277.   pybridge.setResumeVideosMode(checkbox.checked);
  278. }
  279.  
  280. function setResumeVideosMode(value) {
  281.   var checkbox = document.getElementById('resumeVideos');
  282.   checkbox.checked = value
  283. }
  284.  
  285. function setBTMinPort(value) {
  286.   document.getElementById('btminport').value = value;
  287. }
  288.  
  289. function setBTMaxPort(value) {
  290.   document.getElementById('btmaxport').value = value;
  291. }
  292.  
  293. function btMinPortChange() {
  294.   var value = document.getElementById('btminport').value;
  295.   pybridge.setBTMinPort(value);
  296. }
  297.  
  298. function btMaxPortChange() {
  299.   var value = document.getElementById('btmaxport').value;
  300.   pybridge.setBTMaxPort(value);
  301. }
  302.  
  303. function checkBTPorts() {
  304.   if(pybridge.getBTMaxPort() < pybridge.getBTMinPort()) {
  305.     pybridge.setBTMaxPort(pybridge.getBTMinPort());
  306.   }
  307. }
  308.